public class MoverComoTorre implements MoverPieza {

	public void movimiento(Tablero tablero, Pieza pieza, int filaDestino, String columnaDestino) {
		if(pieza.getFila()==filaDestino && pieza.getColumna()!=columnaDestino){ // si filaDestino es igual a lafila actual y columnaDestino es diferente a la columna actual (movimiento horizontal)
			if(tablero.diferenciaColumna(pieza, columnaDestino)>0){
				
				int columnaActual=tablero.traducirColumna(pieza.getColumna())+1;
				
				while(columnaActual<=tablero.traducirColumna(columnaDestino)){ // mientras columnaActual sea menor o igual a columnaDestino
					if(tablero.traducirColumna(columnaDestino)!=columnaActual && tablero.estaVacio(filaDestino, columnaActual)==true){ // si columnaActual y columnaDestino son diferentes y el casillero delante de la pieza esta vacio
						columnaActual++;
					}
					else if(tablero.traducirColumna(columnaDestino)==columnaActual){ // si columnaDestino y columnaActual son iguales
						System.out.println(pieza.detectarMovimiento(filaDestino, columnaDestino));
						tablero.mover(pieza,filaDestino,columnaDestino);
						break;
					}
					else{ // si columnaDestino y columnaActual nunca llegaron a ser iguales (cae en esta condicion cuando encuentra un casillero ocupado en el camino de la pieza)
						System.out.println(pieza.detectarObstaculos());
						break;
					}
				}
			}
			else if(tablero.diferenciaColumna(pieza, columnaDestino)<0){
				
				int columnaActual=tablero.traducirColumna(pieza.getColumna())-1;
				
				while(columnaActual>=tablero.traducirColumna(columnaDestino)){ // mientras columnaActual sea mayor o igual a columnaDestino
					if(tablero.traducirColumna(columnaDestino)!=columnaActual && tablero.estaVacio(filaDestino, columnaActual)==true){ // si columnaActual y columnaDestino son diferentes y el casillero delante de la pieza esta vacio
						columnaActual--;
					}
					else if(tablero.traducirColumna(columnaDestino)==columnaActual){ // si columnaDestino y columnaActual son iguales
						System.out.println(pieza.detectarMovimiento(filaDestino, columnaDestino));
						tablero.mover(pieza,filaDestino,columnaDestino);
						break;
					}
					else{ // si columnaDestino y columnaActual nunca llegaron a ser iguales (cae en esta condicion cuando encuentra un casillero ocupado en el camino de la pieza)
						System.out.println(pieza.detectarObstaculos());
						break;
					}
				}
				
			}
		}
		else if(pieza.getFila()!=filaDestino && pieza.getColumna()==columnaDestino){ // si filaDestino es diferente a la fila actual y columnaDestino es igual a la columna actual (movimiento vertical)
			if(pieza.diferenciaFila(filaDestino)>0){ // si la diferencia entre filas es mayor a cero (movimiento vertical ascendente)
				
				int filaActual=pieza.getFila()+1;
				
				while(filaActual<=filaDestino){ // mientras filaActual sea menor o igual a filaDestino
					if(filaDestino!=filaActual && tablero.estaVacio(filaActual, tablero.traducirColumna(pieza.getColumna()))==true){ // si filaActual y fila destino son diferentes y el casillero delante de la pieza esta vacio
						filaActual++;
					}
					else if(filaDestino==filaActual){ // si filaDestino y filaActual son iguales
						System.out.println(pieza.detectarMovimiento(filaDestino, columnaDestino));
						tablero.mover(pieza,filaDestino,columnaDestino);
						break;
					}
					else{ // si filaDestino y filaActual nunca llegaron a ser iguales (cae en esta condicion cuando encuentra un casillero ocupado en el camino de la pieza)
						System.out.println(pieza.detectarObstaculos());
						break;
					}
				}
			}
			else if(pieza.diferenciaFila(filaDestino)<0){
				
				int filaActual=pieza.getFila()-1;
				
				while(filaActual>=filaDestino){ // mientras filaActual sea mayor o igual a filaDestino
					if(filaDestino!=filaActual && tablero.estaVacio(filaActual, tablero.traducirColumna(pieza.getColumna()))==true){ // si filaActual y fila destino son diferentes y el casillero delante de la pieza esta vacio
						filaActual--;
					}
					else if(filaDestino==filaActual){ // si filaDestino y filaActual son iguales
						System.out.println(pieza.detectarMovimiento(filaDestino, columnaDestino));
						tablero.mover(pieza,filaDestino,columnaDestino);
						break;
					}
					else{ // si filaDestino y filaActual nunca llegaron a ser iguales (cae en esta condicion cuando encuentra un casillero ocupado en el camino de la pieza)
						System.out.println(pieza.detectarObstaculos());
						break;
					}
				}
			}
		}
		else if(pieza.getFila()!=filaDestino && pieza.getColumna()!=columnaDestino){
			System.out.println("movimiento incorrecto");
		}
		else if(pieza.getFila()==filaDestino && pieza.getColumna()==columnaDestino){
			System.out.println("movimiento incorrecto, la pieza no se movio");
		}
	}

}
